package org.htw.osgi.renderservice.essentials;

import javax.servlet.ServletRequest;
/**
 * <p>Ein Dispatcher ermöglicht die An- und Abmeldung von Interceptoren.
 * Soll ein Ereignis durch die betreffenden Interceptoren behandelt
 * werden, so werden die relevanten Daten über ein Kontext-Objekt
 * den Interceptoren mit der {@link Dispatcher#dispatch(ServletRequest)}
 * mitgeteilt.</p>
 * 
 * <p><b>Hinweis:</b> Dispatcher könnten beliebig kaskadiert werden,
 * wenn man sie das IInterceptor Interface implementieren lässt.</p>
 * 
 * @author  Benjamin Friedrich (<a href="mailto:benjamin_friedrich@gmx.de">mailto:benjamin_friedrich@gmx.de</a>)
 * @version 1.0  Juni 2009
 */
public interface IDispatcher 
{
	/**
	 * Registriert den übergebenen interceptor im Dispatcher
	 * 
	 * @param interceptor zu registrierender Interceptor
	 */
	abstract public void registerInterceptor(IInterceptor interceptor);
	
	/**
	 * Meldet Interceptor aus dem Framework ab. Diese Methode wird vor 
	 * allem von den Interceptor selbst verwendet z.B. wenn das 
	 * entsprechende Bundle im OSGI-Framework gestoppt wird. 
	 * 
	 * @param interceptor abzumeldender Interceptor
	 */
	abstract public void unregisterInterceptor(IInterceptor interceptor);
	
	/**
	 * Leitet Ereignis (hier: ein eingehender Request) an die registrierten
	 * Interceptore zur Verarbeiung weiter
	 * 
	 * @param request Kontext-Objekt
	 */
	abstract public void dispatch(ServletRequest request);
	
	/**
	 * Unterbricht die Verarbeitung durch die Interceptoren.
	 * Diese Methode sollte im Fehlerfall aufgerufen werden.
	 */
	abstract public void interrupt();
}